<?php

class LoginHandler {
	
	private static $k_username = 'login_username';
	private static $k_password = 'password';
	
	private $database = NULL;
    
	public function __construct(Database $db) {
			$this->database = $db;
	}

	// Indikerar om användare med lösenord finns i databasen
	public function Authenticate($username, $password) {
		$sql = "SELECT EXISTS(SELECT * FROM User WHERE username=? AND password=?);";
		//$sql = "SELECT * FROM User WHERE username=? AND password=?;";
		$stmt = $this->database->Prepare($sql);
		$stmt->bind_param("ss", $username, $password);
		$auth = $this->database->SelectOne($stmt);
		
		return $auth;
	}
	
	// Kollar om användaren är inloggad
	public function IsLoggedIn() {
		if (isset($_SESSION[self::$k_username])) {
			return true;
		}
		return false;
	}
	
	// Loggar in användaren
	public function DoLogin($username, $password) {
		if ($this->Authenticate($username, $password)) {
			$_SESSION[self::$k_username] = $username;
			return true;
		}
		return false;
	}
	
	
	public function GetLoggedInUser() {
		if (isset($_SESSION[self::$k_username])) {
			return $_SESSION[self::$k_username];
		} 
	}
	
	
	// Loggar ut användaren
	public function DoLogout() {
		if (isset($_SESSION[self::$k_username])) {
			unset($_SESSION[self::$k_username]);
		}				
	}
	
	// Test för inloggningsfunktionalitet
	public function Test($lh) {		
		$lh->DoLogout();
		
		if ($lh->IsLoggedIn()) {
			echo "Fel i DoLogout eller IsLoggedIn. IsLoggedIn borde returnera false men returnerade true";
			return false;
		}
		
		if ($lh->DoLogin("not_a_user", "not_a_password")) {
			echo "Fel! Inloggning lyckades trots att användaren inte finns";
			return false;
		}
		
		$lh->DoLogout();
		
		if (!$lh->DoLogin("user", md5("password"))) {
			echo "Fel! Inloggning misslyckades trots korrekta uppgifter";
			return false;
		}
		
		if (!$lh->IsLoggedIn()) {
			echo "Fel! Användaren bör vara inloggad men IsLoggedIn() returnerar false";
			return false;
		}
		
		$lh->DoLogout();
		
		if ($lh->DoLogin("user", md5("incorrect_password"))) {
			echo "Fel! Inloggning lyckades trots felaktigt lösenord";
			return false;
		}
		
		$lh->DoLogout();
			
		return true;
	}
}